#define _CRT_SECURE_NO_WARNINGS 1

int* arr[3][3] = { 1 };//指针数组，数组里面的每一个元素都是指针
int p = **arr;//*arr=*(arr+0)=arr[0]//第一行的数组,同时也是该行第一个元素的地址
printf("%d", p);//**arr=*(arr[])=*(arr[]+0)=arr[][]；


//函数指针就是指向代码段中函数入口地址的指针。
//其声明形式如下所示：
//ret(*p)(args, ...);
//其中，ret为返回值， * p作为一个整体，代表的是指向该函数的指针，args为形参列表。其中p被称为函数指针变量 。


//(*(void (*)())0)();
//void (*p)(),这是一个函数指针，去掉p后，就变成了函数指针的类型，括号
//里面是一个类型，后面又有数据0，把0强制转换为函数指针类型，把0当作一个函数的地址
//,前面又有一个*号，对函数地址解引用操作，为函数，函数后面又有一个小括号，表明为无参


//void (* signal(int, void(*)(int)))(int);
//首先signal是一个函数名，这个函数有两个形参，一个是整型int，另一个是函数指针
//类型，该函数指针指向的那一个函数的形参是整型，函数返回的类型为void
//而singal函数的返回值又作为了一个函数指针，该指针指向的那一个函数的参数为整型，
//返回类型为void

//typedef void(*pf_t)(int);
//pf_t(signal(int, pf_t));


由于指针所指向的内存已经被释放，所以其它代码有机会改写其中的内容，相当于该指针从此指向了自己无法控制的地方，也称为野指针；
3、为了避免失误，最好在free之后，将指针指向NULL。